package day12;
//测试volatile可见性
public class TestVolatileSee {
    public static void main(String[] args) {
        new See1().start();
        new See2().start();
    }
}
class User{
    //volatile修饰变量 可以让该变量提供可见性
    //可以在不同的线程中可见
    //原因在于每个线程都有自己的工作内存,同时多个线程之间还有一个主内存
    //只要被volatile修饰的变量 被别人修改了 就会让其他线程工作内存的值失效
    //失效就会强制性的刷新主内存的值
    // 类似于static(保证对象的共享) volatile(保证线程的共享)
    static volatile int money=100000;
}
class See1 extends Thread{
    //检测money是否发生变化
    public void run() {
        while(User.money==100000){
            //每次打印通过main(主内存)
            //有线程改变了 让主内存更新 所以该线程肯定可以识别
            //System.out.println(User.money);
        }
        System.out.println("完啦！钱变咯");
    }
}
class See2 extends Thread{
    public void run() {
        //3s之后改钱
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        User.money=10;
    }
}